home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
magazyn_amiga
/
2
/
ami036_jak_wyjac_modul_amosem
< prev
next >
Wrap
Text File
|
1997-09-14
|
4KB
|
149 lines
JAK WYJÂÊ MODUî AMOSEM?
<lead>Ostatnio bawiîem sië moduîami i napisaîem prosty ripper w
AMOS-ie.
<a>XTD/Mystic
<txt>W tym artykule chciaîbym wszystkim amo-koderom przedstawiê
sposoby na rypanie moduîów, pisanych pod Protrackerem.
Pierwszym i zarazem najczëôciej wykorzystywanym przez róûne
programy sposobem jest wyszukiwanie w pamiëci ciâgu znaków
"M.K.". Gdy juû znajdziemy taki ciâg, naleûy sprawdziê, czy
rzeczywiôcie naleûy on do moduîu.
Zaîóûmy, ûe poczâtek ciâgu "M.K." jest pod adresem A. Poczâtek
moduîu, czyli np. A0, znajdujemy poprzez: A0=A-1080. No i jest
poczâtek moduîu, ale czy na pewno jest to moduî? Przede wszystkim
naleûy sprawdziê liczbë pozycji. Nie moûe ona przekroczyê 128
(tyle tylko jest moûliwych do uzyskania w Protrackerze).
Sprawdzamy wiëc A0+950. Jeôli liczba pozycji jest odpowiednia,
sprawdzamy liczbë patternów. W tym celu odczytujemy wartoôci od
A0+952 do A0+1079. Jeôli najwyûsza wartoôê nie przekracza 63, to
juû prawie mamy moduîek. Warto jednak sprawdziê jego ogólnâ
dîugoôê. W tym celu naleûy sprawdziê dîugoôê samego songu. Jeûeli
najwyûszym patternem jest B (dla wygody bëdë operowaî na
zmiennych), to dîugoôê songu moûna obliczyê ze wzoru:
<l>LNG=1084+1024*B
<txt>Aby znaleúê pierwszy sampel, dodajemy jedynie A0 do LNG:
<l>LNG1=LNG+A0
<txt>...i juû mamy adres sampelka. A ile zajmujâ takie sampelki?
Naleûy to obliczyê.
<l>LNG2=0
For N=1 To 31 ;(31 sampli)
LNG2=LNG2+Peek(A0+42+(N-1)*30)*2
Next N
<txt>Tak wiëc dîugoôê moduîu to LNG+LNG2, a adres koïcowy to
LNG1+LNG2. Teraz naleûy sprawdziê, czy dîugoôê moduîu nie wynosi
np. 42 MB. Jeôli nie, to odczytujemy jego tytuî:
<l>TITLE$=""
For T=0 To 19
D=Peek(A0+T)
If D=0 Then Goto NETT
TITLE$=TITLE$+Chr$(D)
NETT:
Next T
<txt>Znaleziony moduîek zgrywamy np. tak:
<l>Bsave "dh1:modules/mod."+TITLE$,A0 To LNG1+LNG2
<txt>Tak, to jest sposób prosty. Nieraz jednak koder nie chce,
ûeby pierwszy lepszy lamer "wyrypaî" sobie moduî i owe znaczki
"M.K." kasuje. Co wtedy? Wtedy naleûy postâpiê trochë inaczej.
Cechâ charakterystycznâ moduîów protrackerowskich jest to, ûe
usuniëto z nich Restart. Bajt odpowiadajâcy za Restart jest
ustawiony stale na 127. Szukamy wiëc w pamiëci wszystkich bajtów,
które wynoszâ 127. Nastëpnie znajdujemy adres poczâtkowy:
<l>A0=A-951 ;(A - adres, pod którym jest wartoôê 127)
<txt>Moûna sprawdziê moduî jak poprzednio, ale to moûe nie
wystarczyê. Co wiëc sprawdziê dodatkowo?
Sampli jest 31, a wiëc ich numery powinny daê sië zapisaê w
patternach przy uûyciu 5 bitów. A zapisujâ sië przy uûyciu 8.
Przeglâdamy wiëc pierwszy pattern (domniemany pierwszy pattern).
<l>PATTSTR:
Gosub PATTSCAN
If ERR=1 Then Goto PATTSTR
<to moûe byê moduî>
Stop
PATTSCAN:
ERR=0
A1=A0+1084
For T1=0 to 63 ;(liczba pozycji w patternie)
For T2=0 to 3 ;(cztery kanaîy)
D=Peek(A1)
A1=A1+4
D=D/16.0 ;(cztery górne bity numeru sampla)
If D>1 Then ERR=1:Goto OVIR
Next T2
Next T1
OVIR:
Return
<txt>Poniewaû trzy z czterech górnych bitów sâ zawsze wyzerowane,
czterobitowa wartoôê w wypadku moduîu nie powinna przekroczyê
jedynki. Jeôli nie przekroczyîa w caîym domniemanym patternie, to
moûna przypuszczaê, ûe jest to wîaônie moduî. Aby byê bardziej
pewnym, ûe jest to moduî, naleûy to sprawdziê tak, jak w wypadku
szukania ciâgu znaków "M.K.". A wiëc sprawdzamy liczbë pozycji,
liczbë patternów, dîugoôê moduîu. Jeôli wszystko poszîo dobrze,
to mamy moduî.
Oczywiôcie bardziej opîaca sië najpierw sprawdziê dîugoôê
domniemanego moduîu, a dopiero potem pattern, ale kolejnoôê to
juû sobie sami ustalicie.
Innym sposobem jest sprawdzenie dîugoôci poszczególnych sampli w
domniemanym module. Dîugoôê ûadnego nie moûe przekraczaê 65535
bajtów.
Tymi sposobami moûna zrobiê ripper nieco bardziej inteligentny,
niû taki, który wyôwietla wszystko jak leci, nawet domniemane
"moduîy" o dîugoôci 24 MB, majâcych 230 pozycji, na których
zapisane jest 241 patternów. Takie moduîy zazwyczaj majâ nazwy:
"@%Fbt^%" lub "!$xxc3$%^**!".
Ps. Osobiôcie nie polecam wyciâgania moduîów. Artykuî ten piszë dla
tych, którzy nieraz lubiâ uprawiaê "sztukë dla sztuki" i bëdâ
chcieli napisaê sobie jakiô ripper.